/**
 * 文件名：@HeaderMatcherViewNameResolver.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.view <br/>
 * 项目名：afw-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.view;

import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

/**
 * 类名：HeaderMatcherViewNameResolver  <br />
 *
 * 功能：请求头匹配视图名称解析器
 *
 * @author xtwin <br />
 * 创建时间：2016年8月4日 下午11:57:15  <br />
 * @version 2016年8月4日
 */
public class HeaderMatcherViewNameResolver implements ViewNameResolver {
	
	// 请求头名称，默认为content-type
	protected String headerName = "content-type";
	
	// 匹配规则与视图名称映射关系，默认为空
	protected Map<String, String> mappings = Collections.emptyMap();

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年8月4日 下午11:57:38<br/>
	 * 
	 * @param request
	 * @param response
	 * @param handler
	 * @return
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.mvc.view.ViewNameResolver#resolve(javax.servlet.http.HttpServletRequest)
	 */
	@Override
	public String resolve(HttpServletRequest request) throws Exception {
		// 请求头的值
		String header = request.getHeader(headerName);
		
		if (null != header) {
			// 依次检查每个映射
			for (Entry<String, String> entry : mappings.entrySet()) {
				if (match(entry.getKey(), header)) {
					// 匹配成功
					return entry.getValue();
				}
			}
		}
		
		return null;
	}
	
	/**
	 * 功能：执行检查 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2016年8月5日 上午12:25:23 <br/>
	 */
	protected boolean match(String pattern, String text) {
		return text.matches(pattern);
	}

	/**
	 * @version 2016年8月4日-下午11:58:26
	 */
	public void setHeaderName(String headerName) {
		this.headerName = headerName;
	}

	/**
	 * @version 2016年8月5日-上午12:24:13
	 */
	public void setMappings(Map<String, String> mappings) {
		this.mappings = mappings;
	}
}
